#define DEBUG
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>

using namespace std;

typedef long double ld;

const ld eps=1.e-5, pi=atan2(0, 1);
const int maxn=500, maxr=14143;

ld sqr(ld a) {
  return a*a;
}

ld dis(ld x1, ld y1, ld x2, ld y2) {
  return sqrt(sqr(x1-x2)+sqr(y1-y2));
}

bool cmp(ld *a, ld *b) {
  return *a<*b;
}

void hash(int n, ld a[][2]) {
  static ld *p[2*maxn+1];
  for (int i=1; i<=n; i++) {
    p[i*2-1] = &a[i][0], p[i*2] = &a[i][1];
  }
  sort(p+1, p+2*n+1, cmp);

  ld last=*p[1], now=1;
  for (int i=1; i<=2*n; i++) {
    *p[i] = last==*p[i] ? now : (last=*p[i], ++now);
  }
}

bool calcSeg(int n, int m, ld p[][2]) {
  static int t[2*maxn+2];
  memset(t, 0, sizeof t);
  for (int i=1; i<=n; i++) {
    t[(int)p[i][0]]++, t[(int)p[i][1]+1]--;
  }
  int s=0;
  for (int i=1; i<=2*n; i++) {
    s += t[i];
    if (s>=m) {
      return true;
    }
  }
  return false;
}

bool check(ld r, int n, int m, int x[], int y[]) {
  for (int i=1; i<=n; i++) {
    static ld ang[maxn+1][2];
    int size=0;
    for (int j=1; j<=n; j++) {
      ld d=dis(x[i], y[i], x[j], y[j]);
      if (d>0 && d<=2*r) {
        ld t=atan2(x[j]-x[i], y[j]-y[i]), k=acos(d/2/r);
        size++;
        ang[size][0]=t-k, ang[size][1]=t+k;
        if (ang[size][0]<=-pi) {
          ang[size][0]+=pi;
        }
        if (ang[size][1]>pi) {
          ang[size][1]-=pi;
        }
      }
    }

    hash(size, ang);

    if (calcSeg(size, m-1, ang)) {
      return true;
    }
  }
  return false;
}

int main() {
  freopen("guard.in", "r", stdin);
  freopen("guard.out", "w", stdout);

  static int x[maxn+1], y[maxn+1];
  int n, m;
  scanf("%d %d", &n, &m);
  for (int i=1; i<=n; i++) {
    scanf("%d %d", x+i, y+i);
  }

  ld ans = maxr;
  for (ld l=0, r=maxr, mid; l<=r; ) {
    mid = (l+r)/2;
    if (check(mid, n, m, x, y)) {
      r = mid-eps;
      ans = mid;
    } else {
      l = mid+eps;
    }
  }

  printf("%LF", ans);

  fclose(stdin);
  fclose(stdout);
  return 0;
}
